SPDX-FileCopyrightText: 2014 Morgan Baufils SPDX-FileCopyrightText: 2024 AlICe laboratory https://alicelab.be
SPDX-License-Identifier: GPL-3.0-or-later
script ECOLES PRIMAIRES TOULOUSE LE MIRAIL développé sous Blender 2.71 / hash 9337574 windows 8
import bpy
import random
from mathutils import VectorNETTOYAGE DU MODELE
def nettoyage():
    bpy.ops.object.select_all(action="SELECT")
    bpy.ops.object.delete(use_global=False)
nettoyage()ETAPE1: -Définition de la salle de classe de base ETAPE2: -Définition des différents modules de base -Choix aléatoire ETAPE3: -Définition des transformations -Définition des modules de second niveau -Choix aléatoire ETAPE4: -Définition de l’étage ETAPE5: -Définition des modules de dernier niveau -Choix aléatoire = projet total CONSOLE
DEFINITION DE LA SALLE DE CLASSE DE BASE
pos_X = 0
pos_Y = 0
pos_Z = 0
dim_X = 7.2
dim_Y = 7.2
dim_Z = 3
z = 0def classe(pos_X, pos_Y, pos_Z, dim_X, dim_Y, dim_Z):
    bpy.ops.mesh.primitive_cube_add(location=(pos_X, pos_Y, pos_Z))
    bpy.ops.transform.resize(value=(0.5, 0.5, 0.5))
    bpy.ops.transform.resize(value=(dim_X, dim_Y, dim_Z))DEFINITION DU MODULE 11
"MODULE11 trois classes disposées en triangle"def module11():
    classe(pos_X + (dim_X / 2), pos_Y + dim_Y, dim_Z / 2, dim_X, dim_Y, dim_Z)
    classe(pos_X + dim_X, pos_Y, (dim_Z + z) / 2, dim_X, dim_Y, dim_Z + z)
    classe(pos_X, pos_Y, (dim_Z + z) / 2, dim_X, dim_Y, dim_Z + z)DEFINITION DU MODULE 12
"MODULE12 quatre classes disposées en S"def module12():
    classe(pos_X - (dim_X / 2), pos_Y + dim_Y, dim_Z / 2, dim_X, dim_Y, dim_Z)
    module11()DEFINITION DU MODULE 13
"MODULE13 quatre classes disposées en U"#
def module13():
    classe(pos_X - (dim_X / 2), pos_Y + dim_Y, dim_Z / 2, dim_X, dim_Y, dim_Z)
    classe(pos_X + (dim_X / 2), pos_Y + dim_Y, dim_Z / 2, dim_X, dim_Y, dim_Z)
    classe(pos_X + dim_X, pos_Y, (dim_Z + z) / 2, dim_X, dim_Y, dim_Z + z)
    classe(pos_X - dim_X, pos_Y, (dim_Z + z) / 2, dim_X, dim_Y, dim_Z + z)DEFINITION DU MODULE 14
"MODULE14 quatre classes disposées en diagonales"def module14():
    classe(pos_X - dim_X, pos_Y + dim_Y * 1.5, dim_Z / 2, dim_X, dim_Y, dim_Z)
    classe(pos_X, pos_Y + dim_Y, dim_Z / 2, dim_X, dim_Y, dim_Z)
    classe(pos_X - dim_X, pos_Y + dim_Y / 2, (dim_Z + z) / 2, dim_X, dim_Y, dim_Z + z)
    classe(pos_X + dim_X, pos_Y + dim_Y / 2, (dim_Z + z) / 2, dim_X, dim_Y, dim_Z + z)
    classe(pos_X, pos_Y, (dim_Z + z) / 2, dim_X, dim_Y, dim_Z + z)DEFINITION DU MODULE 15
"MODULE15 cinq classes disposées en W"def module15():
    classe(pos_X + dim_X * 1.5, pos_Y + dim_Y, dim_Z / 2, dim_X, dim_Y, dim_Z)
    module12()DEFINITION DU MODULE DE BASE
"Choix aléatoire parmis les modules 11, 12, 13, 14, 15"
"Etabissement d'un père et groupement des classes"
liste = [module11, module12, module13, module14, module15]
m = random.choice(liste)
global moduleDeBasedef moduleDeBase():
    global lo
    global m
    if m == module11 or m == module12 or m == module15:
        lo = dim_X * 2  # longueur des modules
    if m == module13 or m == module14:
        lo = dim_X * 3  # longueur des modules
    m()
    bpy.ops.object.select_all(action="SELECT")
    bpy.ops.object.parent_set(type="OBJECT", keep_transform=False)
    bpy.ops.object.select_all(action="SELECT")
    bpy.ops.object.join()DEFINITION DES TRANSFORMATIONS
"Définition des différents moyens d'expansion"def duplication(x, y, z):
    bpy.ops.object.duplicate_move(TRANSFORM_OT_translate={"value": (x, y, z)})def translation(x, y, z):
    context = bpy.context
    obj = context.active_object
    obj.location += Vector([x, y, z])def rotation(x):
    bpy.context.object.rotation_euler[2] = xdef symetrie():
    bpy.ops.transform.mirror(constraint_axis=(False, True, False))def symetrie2():
    bpy.ops.transform.mirror(constraint_axis=(True, False, False))DEFINITION DU MODULE 21 MODULE21 4*modules de base rotation et décalage organisation autours de l’espace servant carré
def espaceServant11():
    classe(pos_X, pos_Y - lo + dim_Y / 2, (dim_Z + z) / 2, lo, lo, dim_Z + z)def espaceServant12():
    classe(pos_X - dim_X / 2, pos_Y - lo + dim_Y, (dim_Z + z) / 2, lo, lo, dim_Z + z)def espaceServant13():
    classe(
        pos_X + dim_X / 2,
        pos_Y - lo + dim_Y,
        (dim_Z + z) / 2,
        lo + dim_X,
        lo + dim_Y,
        dim_Z + z,
    )def module21():
    i = 0
    while i < 4:
        moduleDeBase()
        translation(-2 * dim_X + dim_X / 2, -lo + dim_Y / 2, 0)
        rotation(1.5708)
        i = i + 1
    if m == module11 or m == module12 or m == module15:
        espaceServant11()
    if m == module13:
        espaceServant12()
    if m == module14:
        espaceServant13()DEFINITION DU MODULE 22 MODULE22 3*modules de base symétrie et décalage disposition de part et d’autre d’un espace servant longitudinal
c = random.randint(2, 4)def espaceServant21():
    classe(
        pos_X + (c * 2 * dim_X + dim_X),
        pos_Y - 0.75 * dim_Y,
        (dim_Z + z) / 2,
        dim_X + c * 3 * dim_X + dim_X,
        dim_Y / 2,
        dim_Z + z,
    )def espaceServant22():
    classe(
        pos_X + (c * 2 * dim_X + dim_X),
        pos_Y - 0.75 * dim_Y,
        (dim_Z + z) / 2,
        dim_X + c * lo + dim_X,
        dim_Y + dim_Y / 2,
        dim_Z + z,
    )def module22():
    i = 0
    while i < 3:
        moduleDeBase()
        translation(c * dim_X, -1.5 * dim_Y, 0)
        symetrie()
        i = i + 1
    if m == module11 or m == module12 or m == module15 or m == module13:
        espaceServant21()
    if m == module14:
        espaceServant22()DEFINITION DU MODULE 23 MODULE23 4*modules de base rotation et alignement disposition autours de l’espace servant carré
def espaceServant31():
    classe(
        pos_X + dim_X / 4,
        pos_Y - (dim_Y) - dim_Y / 4,
        (dim_Z + z) / 2,
        lo - dim_X / 2,
        lo - dim_Y / 2,
        dim_Z + z,
    )def espaceServant32():
    classe(
        pos_X - dim_X / 4,
        pos_Y - lo + dim_Y + dim_Y / 4,
        (dim_Z + z) / 2,
        lo - dim_X / 2,
        lo - dim_Y / 2,
        dim_Z + z,
    )def espaceServant33():
    classe(
        pos_X + dim_X - dim_X / 4,
        pos_Y - lo + dim_Y + dim_Y / 4,
        (dim_Z + z) / 2,
        lo + dim_X / 2,
        lo + dim_Y / 2,
        dim_Z + z,
    )def module23():
    i = 0
    while i < 4:
        moduleDeBase()
        translation(-1.5 * dim_X + dim_X / 2, -lo + dim_Y / 2, 0)
        rotation(1.5708)
        i = i + 1
    if m == module11 or m == module12 or m == module15:
        espaceServant31()
    if m == module13:
        espaceServant32()
    if m == module14:
        espaceServant33()DEFINITION DU MODULE 24 MODULE24 3*modules de base rotation, alignement et décalage disposition autours de l’espace servant rectangulaire
def espaceServant41():
    classe(pos_X + dim_X / 2, pos_Y - dim_Y, (dim_Z + z) / 2, lo, lo / 2, dim_Z + z)def espaceServant42():
    classe(
        pos_X,
        pos_Y - lo + dim_Y + dim_Y / 2,
        (dim_Z + z) / 2,
        lo,
        lo - dim_Y,
        dim_Z + z,
    )def espaceServant43():
    classe(pos_X, pos_Y - dim_Y, (dim_Z + z) / 2, lo, lo / 2 + dim_X / 2, dim_Z + z)def module24():
    if m == module11 or m == module13 or m == module15:
        i = 1
        while i < 3:
            if i == 1:
                moduleDeBase()
                translation(-1.5 * dim_X + dim_X / 2, -lo + dim_Y / 2, 0)
                rotation(1.5708)
            if i == 2:
                moduleDeBase()
                symetrie()
                translation(0, -lo, 0)
            i = i + 1
        moduleDeBase()
        if m == module11 or m == module15:
            espaceServant41()
        if m == module13:
            espaceServant42()
    if m == module12:
        i = 1
        while i < 3:
            if i == 1:
                moduleDeBase()
                translation(-1.5 * dim_X + dim_X / 2, -lo + dim_Y / 2, 0)
                rotation(1.5708)
            if i == 2:
                moduleDeBase()
                symetrie()
                translation(0, -lo, 0)
            i = i + 1
        moduleDeBase()
        espaceServant41()
    if m == module14:
        i = 1
        while i < 3:
            if i == 1:
                moduleDeBase()
                translation(-2 * dim_X + dim_X / 2, -lo + dim_Y * 2, 0)
                rotation(1.5708)
            if i == 2:
                moduleDeBase()
                symetrie()
                translation(0, -2 * dim_Y, 0)
            i = i + 1
        moduleDeBase()
        espaceServant43()DEFINITION DU MODULE 25 MODULE23 2*modules de base symétrie disposition de part et d’autre d’un espace servant longitudinal
def espaceServant51():
    classe(
        pos_X, pos_Y + dim_Y * 1.75, (dim_Z + z) / 2, dim_X + lo, dim_Y / 2, dim_Z + z
    )def espaceServant52():
    classe(
        pos_X,
        pos_Y + dim_Y * (-0.75),
        (dim_Z + z) / 2,
        dim_X + lo,
        dim_Y / 2,
        dim_Z + z,
    )def module25():
    i = 0
    while i < 2:
        moduleDeBase()
        translation(0, -1.5 * dim_Y, 0)
        symetrie()
        i = i + 1
    if m == module11 or m == module12 or m == module15 or m == module14:
        espaceServant52()
    if m == module13:
        espaceServant52()DEFINITION DU MODULE DE BASE 2
"Choix aléatoire parmis les modules 21, 22, 23, 24, 25"
liste2 = [module21, module22, module23, module24, module25]
mm = random.choice(liste2)
global moduleDeBase2def moduleDeBase2():
    global mm
    global LO
    mm()
    if mm == module21 or mm == module22 or mm == module25:
        LO = dim_X * 2
    if mm == module23 or mm == module24:
        LO = dim_X * 3
    bpy.ops.object.select_all(action="SELECT")
    bpy.ops.object.join()"Etablissement de l'étage"DEFINITION DE L’ETAGE1
"Etage sur tout l'espace servant et sur une partie du RDC"
z = z + 3def moduleDeBase3():
    moduleDeBase2()DEFINITION DU MODULE 41 MODULE21 2* modules de base3 symétrie, translation et imbrication
def module41():
    moduleDeBase3()
    if mm == module21 or mm == module23:
        duplication(pos_X + lo, pos_Y + lo, pos_Z)
        symetrie()
    if mm == module22:
        duplication(pos_X + dim_X * 1.5, pos_Y + lo + dim_Y / 2, pos_Z)
        symetrie()
    if mm == module24:
        if m == module11 or m == module12:
            duplication(pos_X, pos_Y + 2 * lo, pos_Z)
            symetrie()
        if m == module13:
            duplication(pos_X + dim_X, pos_Y + 2 * lo - dim_Y, pos_Z)
            symetrie()
        if m == module14 or m == module15:
            duplication(pos_X, pos_Y + lo + dim_Y * 1.5, pos_Z)
            symetrie()
    if mm == module25:
        if m == module11:
            duplication(pos_X + lo / 3, pos_Y + lo * 2 - dim_Y / 2, pos_Z)
            symetrie()
        if m == module12 or m == module15:
            duplication(pos_X + lo, pos_Y + lo * 2 - dim_Y / 2, pos_Z)
            symetrie()
        if m == module13 or m == module14:
            duplication(pos_X + dim_X * 2, pos_Y + lo + dim_Y / 2, pos_Z)
            symetrie()DEFINITION DU MODULE 42 MODULE21 2* modules de base3 symétrie, translation et addition
def module42():
    moduleDeBase3()
    if mm == module21 or mm == module23:
        if m == module11:
            duplication(pos_X + lo, pos_Y + lo * 3, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X, pos_Y + lo, pos_Z + dim_Z / 2, dim_X * 2, dim_Y, dim_Z
            )
        if m == module12:
            duplication(pos_X + lo, pos_Y + lo * 3, pos_Z)
            symetrie()
            classe(pos_X, pos_Y + lo, pos_Z + dim_Z / 2, dim_X * 2, dim_Y, dim_Z)
        if m == module13:
            duplication(pos_X + 2 * dim_X, pos_Y + lo * 2 + dim_Y, pos_Z)
            symetrie()
            classe(pos_X, pos_Y + dim_Y * 2, pos_Z + dim_Z / 2, dim_X * 2, dim_Y, dim_Z)
        if m == module14:
            duplication(pos_X + 2 * dim_X, pos_Y + lo * 2 + dim_Y, pos_Z)
            symetrie()
            classe(pos_X, pos_Y + dim_Y * 2, pos_Z + dim_Z / 2, dim_X, dim_Y, dim_Z)
        if m == module15:
            duplication(pos_X + lo + dim_X, pos_Y + lo * 3, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X,
                pos_Y + dim_Y * 2,
                pos_Z + dim_Z / 2,
                dim_X * 2,
                dim_Y,
                dim_Z,
            )
    if mm == module22:
        if m == module11 or m == module12:
            duplication(pos_X + lo, pos_Y + dim_Y * 5.5, pos_Z)
            symetrie()
            classe(
                pos_X + (c + 1) * lo,
                pos_Y + lo,
                pos_Z + dim_Z / 2,
                dim_X * 3,
                dim_Y,
                dim_Z,
            )
        if m == module13:
            duplication(pos_X + lo, pos_Y + dim_Y * 5.5, pos_Z)
            symetrie()
            classe(
                pos_X + (c + 1) * 2 * dim_X,
                pos_Y + 2 * dim_Y,
                pos_Z + dim_Z / 2,
                dim_X * 3,
                dim_Y,
                dim_Z,
            )
        if m == module14 or m == module15:
            duplication(pos_X + lo, pos_Y + dim_Y * 5.5, pos_Z)
            symetrie()
            classe(
                pos_X + (c) * 2.25 * dim_X,
                pos_Y + 2 * dim_Y,
                pos_Z + dim_Z / 2,
                dim_X * 4,
                dim_Y,
                dim_Z,
            )
    if mm == module24:
        if m == module12:
            duplication(pos_X + lo, pos_Y + lo * 3, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X,
                pos_Y + dim_Y * 2,
                pos_Z + dim_Z / 2,
                dim_X * 2,
                dim_Y,
                dim_Z,
            )
        if m == module11:
            duplication(pos_X + lo + dim_X, pos_Y + dim_Y * 5, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X * 1.5,
                pos_Y + dim_Y * 2,
                pos_Z + dim_Z / 2,
                dim_X * 3,
                dim_Y,
                dim_Z,
            )
        if m == module13:
            duplication(pos_X + lo, pos_Y + dim_Y * 4.5, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X,
                pos_Y + dim_Y * 2,
                pos_Z + dim_Z / 2,
                dim_X * 2,
                dim_Y,
                dim_Z,
            )
        if m == module14:
            duplication(pos_X + 4 * dim_X, pos_Y + dim_Y * 4.5, pos_Z)
            symetrie()
            classe(
                pos_X + 1.5 * dim_X,
                pos_Y + dim_Y * 1.5,
                pos_Z + dim_Z / 2,
                dim_X * 2,
                dim_Y,
                dim_Z,
            )
        if m == module15:
            duplication(pos_X + lo, pos_Y + dim_Y * 5.5, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X,
                pos_Y + dim_Y * 2,
                pos_Z + dim_Z / 2,
                dim_X * 2,
                dim_Y,
                dim_Z,
            )
    if mm == module25:
        if m == module12:
            duplication(pos_X + lo, pos_Y + lo * 2.75, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X,
                pos_Y + dim_Y * 2,
                pos_Z + dim_Z / 2,
                dim_X * 2,
                dim_Y,
                dim_Z,
            )
        if m == module11:
            duplication(pos_X + lo + dim_X, pos_Y + dim_Y * 5, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X * 1.5,
                pos_Y + dim_Y * 2,
                pos_Z + dim_Z / 2,
                dim_X * 3,
                dim_Y,
                dim_Z,
            )
        if m == module13:
            duplication(pos_X + lo, pos_Y + dim_Y * 4.5, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X,
                pos_Y + dim_Y * 2,
                pos_Z + dim_Z / 2,
                dim_X * 2,
                dim_Y,
                dim_Z,
            )
        if m == module14:
            duplication(pos_X + 4 * dim_X, pos_Y + dim_Y * 4.5, pos_Z)
            symetrie()
            classe(
                pos_X + 1.5 * dim_X,
                pos_Y + dim_Y * 1.5,
                pos_Z + dim_Z / 2,
                dim_X * 2,
                dim_Y,
                dim_Z,
            )
        if m == module15:
            duplication(pos_X + lo, pos_Y + dim_Y * 5.5, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X,
                pos_Y + dim_Y * 2,
                pos_Z + dim_Z / 2,
                dim_X * 2,
                dim_Y,
                dim_Z,
            )DEFINITION DU MODULE 43 MODULE21 2* modules de base3 symétrie, translation et accolement
def module43():
    moduleDeBase3()
    if mm == module21:
        if m == module11:
            duplication(pos_X + dim_X, pos_Y + dim_Y * 5, pos_Z)
            symetrie()
        if m == module12:
            duplication(pos_X + dim_X * 2, pos_Y + dim_Y * 5, pos_Z)
            symetrie()
        if m == module13 or m == module15:
            duplication(pos_X + dim_X * 2, pos_Y + dim_Y * 6, pos_Z)
            symetrie()
        if m == module14:
            duplication(pos_X + dim_X * 3, pos_Y + dim_Y * 6, pos_Z)
            symetrie()
    if mm == module22 or mm == module25:
        if m == module11 or m == module12 or m == module13 or m == module15:
            duplication(pos_X + dim_X / 2, pos_Y + dim_Y * 4.5, pos_Z)
            symetrie()
        if m == module14:
            duplication(pos_X + dim_X / 2, pos_Y + dim_Y * 5.5, pos_Z)
            symetrie()
    if mm == module23:
        if m == module11:
            duplication(pos_X + dim_X, pos_Y + dim_Y * 4.5, pos_Z)
            symetrie()
        if m == module12:
            duplication(pos_X + dim_X * 2, pos_Y + dim_Y * 4.5, pos_Z)
            symetrie()
        if m == module13 or m == module15:
            duplication(pos_X + dim_X * 2, pos_Y + dim_Y * 5.5, pos_Z)
            symetrie()
        if m == module14:
            duplication(pos_X + dim_X * 3, pos_Y + dim_Y * 5.5, pos_Z)
            symetrie()
    if mm == module24:
        if m == module11:
            duplication(pos_X + dim_X, pos_Y + dim_Y * 4, pos_Z)
            symetrie()
        if m == module12:
            duplication(pos_X + dim_X * 2, pos_Y + dim_Y * 4, pos_Z)
            symetrie()
        if m == module13 or m == module15:
            duplication(pos_X + dim_X * 2, pos_Y + dim_Y * 5, pos_Z)
            symetrie()
        if m == module14:
            duplication(pos_X + dim_X, pos_Y + dim_Y * 5.5, pos_Z)
            symetrie()DEFINITION DU MODULE 44 MODULE21 2* modules de base3 rotation et accolement
def module44():
    moduleDeBase3()
    if mm == module21:
        if m == module11 or m == module12:
            duplication(pos_X + lo + dim_X / 2, pos_Y + lo * 2, pos_Z)
            rotation(1.5708)
        if m == module13:
            duplication(pos_X + lo, pos_Y + lo * 2, pos_Z)
            rotation(1.5708)
        if m == module14:
            duplication(pos_X + dim_X, pos_Y + lo * 2, pos_Z)
            rotation(1.5708)
        if m == module15:
            duplication(pos_X + lo + dim_X * 1.5, pos_Y + lo * 2, pos_Z)
            rotation(1.5708)
    if mm == module22:
        duplication(pos_X - dim_X * 4, pos_Y + dim_Y * 4, pos_Z)
        rotation(1.5708)
    if mm == module23:
        if m == module11:
            duplication(pos_X + lo, pos_Y + dim_Y * 3.5, pos_Z)
            rotation(1.5708)
        if m == module12:
            duplication(pos_X + 1.5 * dim_X, pos_Y + dim_Y * 4.5, pos_Z)
            rotation(1.5708)
        if m == module13:
            duplication(pos_X + lo, pos_Y + lo * 1.5, pos_Z)
            rotation(1.5708)
        if m == module14:
            duplication(pos_X + dim_X, pos_Y + lo * 2, pos_Z)
            rotation(1.5708)
        if m == module15:
            duplication(pos_X + lo + dim_X * 1.5, pos_Y + lo * 2, pos_Z)
            rotation(1.5708)
    if mm == module24:
        if m == module11:
            duplication(pos_X + 1.5 * dim_X, pos_Y + dim_Y * 3.5, pos_Z)
            rotation(1.5708)
        if m == module12:
            duplication(pos_X + dim_X, pos_Y + dim_Y * 4.5, pos_Z)
            rotation(1.5708)
        if m == module13:
            duplication(pos_X + 2.5 * dim_X, pos_Y + lo * 1.5, pos_Z)
            rotation(1.5708)
        if m == module14:
            duplication(pos_X + dim_X, pos_Y + lo * 2, pos_Z)
            rotation(1.5708)
        if m == module15:
            duplication(pos_X + lo + dim_X, pos_Y + dim_Y * 4.5, pos_Z)
            rotation(1.5708)
    if mm == module25:
        if m == module11:
            duplication(pos_X + 1.25 * dim_X, pos_Y + dim_Y * 2.75, pos_Z)
            rotation(1.5708)
        if m == module12:
            duplication(pos_X + 1.25 * dim_X, pos_Y + dim_Y * 3.25, pos_Z)
            rotation(1.5708)
        if m == module13:
            duplication(pos_X + 2.25 * dim_X, pos_Y + 3.25 * dim_Y, pos_Z)
            rotation(1.5708)
        if m == module14:
            duplication(pos_X + lo * 0.75, pos_Y + lo * 1.25, pos_Z)
            rotation(1.5708)
        if m == module15:
            duplication(pos_X + 2.25 * dim_X, pos_Y + dim_Y * 3.25, pos_Z)
            rotation(1.5708)DEFINITION DU MODULE 45 MODULE21 2* modules de base3 symétrie et addition
def module45():
    moduleDeBase3()
    if mm == module21:
        if m == module11 or m == module12:
            duplication(pos_X + 4 * lo, pos_Y, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X * 4,
                pos_Y - dim_Y * 2,
                pos_Z + dim_Z / 2,
                dim_X * 2,
                dim_Y,
                dim_Z,
            )
        if m == module13:
            duplication(pos_X + 3 * lo, pos_Y, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X * 4,
                pos_Y - dim_Y * 2.5,
                pos_Z + dim_Z / 2,
                dim_X * 2,
                dim_Y * 2,
                dim_Z,
            )
        if m == module14:
            duplication(pos_X + 3 * lo, pos_Y, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X * 5,
                pos_Y - dim_Y / 2,
                pos_Z + dim_Z / 2,
                dim_X,
                dim_Y,
                dim_Z,
            )
        if m == module15:
            duplication(pos_X + 4 * lo, pos_Y, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X * 4,
                pos_Y - dim_Y * 2,
                pos_Z + dim_Z / 2,
                dim_X * 2,
                dim_Y * 3,
                dim_Z,
            )
    if mm == module22:
        duplication(pos_X + 2.5 * lo, pos_Y, pos_Z)
        symetrie()
    if mm == module23:
        if m == module11:
            duplication(pos_X + 4 * lo, pos_Y, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X * 4.25,
                pos_Y - dim_Y * 1.5,
                pos_Z + dim_Z / 2,
                dim_X * 2.5,
                dim_Y,
                dim_Z,
            )
        if m == module12:
            duplication(pos_X + 4 * lo, pos_Y, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X * 4.25,
                pos_Y - dim_Y,
                pos_Z + dim_Z / 2,
                dim_X * 2.5,
                dim_Y * 2,
                dim_Z,
            )
        if m == module13:
            duplication(pos_X + 3 * lo, pos_Y, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X * 4.25,
                pos_Y - dim_Y * 2,
                pos_Z + dim_Z / 2,
                dim_X * 2.5,
                dim_Y * 2,
                dim_Z,
            )
        if m == module14:
            duplication(pos_X + 3 * lo, pos_Y, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X * 5.25,
                pos_Y,
                pos_Z + dim_Z / 2,
                dim_X * 1.5,
                dim_Y,
                dim_Z,
            )
        if m == module15:
            duplication(pos_X + 3.25 * lo, pos_Y, pos_Z)
            symetrie()
            classe(
                pos_X + dim_X * 3.5,
                pos_Y - dim_Y * 1.5,
                pos_Z + dim_Z / 2,
                dim_X,
                dim_Y * 3,
                dim_Z,
            )
    if mm == module24:
        if m == module11 or m == module12 or m == module15:
            duplication(pos_X + 4 * dim_X, pos_Y, pos_Z)
            symetrie2()
            classe(
                pos_X + dim_X * 2.5,
                pos_Y - dim_Y,
                pos_Z + dim_Z / 2,
                dim_X * 2,
                dim_Y * 3,
                dim_Z,
            )
        if m == module13:
            duplication(pos_X + 4 * dim_X, pos_Y, pos_Z)
            symetrie2()
            classe(
                pos_X + dim_X * 2,
                pos_Y - dim_Y * 1.5,
                pos_Z + dim_Z / 2,
                dim_X,
                dim_Y * 4,
                dim_Z,
            )
        if m == module14:
            duplication(pos_X + 6 * dim_X, pos_Y, pos_Z)
            symetrie2()
            classe(
                pos_X + dim_X * 3,
                pos_Y - dim_Y,
                pos_Z + dim_Z / 2,
                dim_X * 3,
                dim_Y * 3,
                dim_Z,
            )
    if mm == module25:
        duplication(pos_X + 5 * dim_X, pos_Y, pos_Z)
        symetrie2()
        classe(
            pos_X + dim_X * 2.5,
            pos_Y - dim_Y * 0.75,
            pos_Z + dim_Z / 2,
            dim_X * 2,
            dim_Y * 2.5,
            dim_Z,
        )DEFINITION DU PROJET TOTAL
"Choix aléatoire parmis les modules 41, 42, 43, 44, 45"
liste3 = [module41, module42, module43, module44, module45]
mmmm = random.choice(liste3)def projetTotal():
    mmmm()
    bpy.ops.object.select_all(action="SELECT")
projetTotal()DEFINITION DES PARAMETRES CONSOLE
if m == module11:
    nom1 = "trois classes disposees en triangle"
    nb1 = 5
    c1 = 11
if m == module12:
    nom1 = "quatre classes disposees en S"
    nb1 = 6
    c1 = 12
if m == module13:
    nom1 = "quatre classes disposees en U"
    nb1 = 6
    c1 = 13
if m == module14:
    nom1 = "quatre classes disposees en diagonales"
    nb1 = 7
    c1 = 14
if m == module15:
    nom1 = "cinq classes disposees en W"
    nb1 = 7
    c1 = 15
if mm == module21:
    nom2 = "    -rotation et decalage \n    -organisation autours de l'espace servant carre"
    nb2 = 4
    c2 = 21
if mm == module22:
    nom2 = "    -symetrie et decalage\n    -disposition de part et d'autre d'un espace servant longitudinal"
    nb2 = 3
    c2 = 22
if mm == module23:
    nom2 = "    -rotation et alignement\n    -disposition autours de l'espace servant carre"
    nb2 = 4
    c2 = 23
if mm == module24:
    nom2 = "    -rotation, alignement et decalage\n    -disposition autours de l'espace servant rectangulaire"
    nb2 = 3
    c2 = 24
if mm == module25:
    nom2 = "    -symetrie\n    -disposition de part et d'autre d'un espace servant longitudinal"
    nb2 = 2
    c2 = 25
if mmmm == module41:
    nom3 = "    -symetrie, translation et imbrication"
    c3 = 41
if mmmm == module42:
    nom3 = "    -symetrie, translation et addition"
    c3 = 42
if mmmm == module43:
    nom3 = "    -symetrie, translation et accolement"
    c3 = 43
if mmmm == module44:
    nom3 = "    -rotation et accolement"
    c3 = 44
if mmmm == module45:
    nom3 = "    -symetrie et addition"
    c3 = 45
print(
    " \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n "
)
print("---------------- ECOLES PRIMAIRES TOULOUSE LE MIRAIL  ----------------")
print()
print(" Classe de dimensions: ", (dim_X), " x ", (dim_Y), " x ", (dim_Z), " m")
print()
print(" Le module de base est constitue de ", (nom1), ".")
print()
print(" Le module de base est reproduit ", (nb2), " fois, puis ils sont disposes par:")
print(nom2)
print()
print(" Etage sur tout l'espace servant et sur une partie du RDC")
print()
print(" L'ensemble est alors duplique, puis organise par :")
print(nom3)
print()
print(
    " Au total, il y a ",
    (nb1) * (nb2) * 2,
    "salles de classes pour cette configuration.",
)
print()print(“C:”,c1,”-“,c2,”-“,c3) print()
print("----------------------------------------------------------------------")
print()